मैं एक्सेल में एक कॉलम टेबल को पॉप्युलेट करने की कोशिश कर रहा हूं जिसे मैं वीबीए और एक आयामी सरणी का उपयोग करके पावर क्वेरी से कनेक्ट कर सकता हूं।

तो उपयोगकर्ता एक टेक्स्टबॉक्स में एक सूची डालता है जहां प्रत्येक आइटम अर्धविराम से अलग होता है, फिर वह उसे सरणी में लाता है। अब तक मेरे पास है:

Dim arrSIOCodes As Variant

arrSIOCodes = Split(tbSIOCodes, ";")

ThisWorkbook.Sheets("CAEATFA_SIO").Activate

Call ChangeTableToArray(tbl:=ThisWorkbook.Sheets("CAEATFA_SIO").ListObjects("tblSIOCodes"), ar:=arrSIOCodes)

और मुझे यह उप एक और स्टैक ओवरफ्लो पोस्ट से मिला है, लेकिन मुझे इसे अपने मुद्दे पर अनुकूलित करने की आवश्यकता है और मुझे परेशानी हो रही है

Sub ChangeTableToArray(tbl As ListObject, ar)
  Dim newRows As Long: newRows = 1 + UBound(ar, 1) - LBound(ar, 1)
  If Not tbl.DataBodyRange Is Nothing Then tbl.DataBodyRange.EntireRow.Delete
  If newRows > 1 Then tbl.HeaderRowRange.Resize(newRows - 1).Offset(2).EntireRow.Insert
   tbl.HeaderRowRange.Resize(newRows, 1 + UBound(ar, 1) - LBound(ar, 1)).Offset (1).value = ar
End Sub

यह वही है जो वर्तमान कोड कर रहा है: यहां छवि विवरण दर्ज करें

हालांकि मुझे यह करने की ज़रूरत है:

enter image description here

1
SanomaJean 20 पद 2017, 02:45

2 जवाब

सबसे बढ़िया उत्तर

आप गंतव्य में कॉलम की संख्या का आकार बदल रहे हैं, लेकिन आपके पास स्टोर करने के लिए केवल एक कॉलम (यदि आप Transpose सरणी) हैं। तो कुछ ऐसा करें:

tbl.HeaderRowRange.Resize(newRows, 1).Offset (1).value = Application.Transpose(ar)
1
YowE3K 20 पद 2017, 02:56

देर से बैठक में जाने के बारे में, इसलिए मैंने इसे जल्दी से एक साथ फेंक दिया और इसका परीक्षण नहीं किया गया। लेकिन इसे देखने का यह एक और तरीका है:

Sub ArrayToTable(ByVal ws As Worksheet, ParamArray YourArr() As Variant)

    Dim TmpArr As Variant, i As Long, LineNum As Long

    TmpArr = YourArr(0)

    LineNum = 1 'whatever method you use to find linenumbers

    For i = LBound(TmpArr) To UBound(TmpArr)
        ws.Cells(LineNum, 1).Value = TmpArr(i)
        LineNum = LineNum + 1
    Next

End Sub
0
K.Dᴀᴠɪs 20 पद 2017, 03:03