2014-10-29 41 views
0

後我與26的長度發送阿雷兩次這樣的函數:陣列影響其發送到功能

.... 
    SaveXML strXmlItem, DFCCM, SCTM, Zieltabelle 
    SaveXML strXmlItem, DFCCS, SCTS, Zieltabelle 
    .... 

第一invokation後:

SaveXML strXmlItem, DFCCM, SCTM, Zieltabelle 

strXmlItem內容是改變。該陣列與其他variablesis definedlike這樣的:

Dim strSql, strXmlItem(), strA2l, strHex As String 

而且功能:

Private Function SaveXML(strarr(), DFCC As String, SCT As String, ByVal Zieltabelle As String) 
     strarr(4) = DFCC 
     strarr(6) = SCT 

     For K = 0 To UBound(strarr) 
      MsgBox strarr(K) 
     Next K 

     'XML-Syntax anpassen 
     For J = 1 To conAnzahlFelder - 1 
      strarr(J) = MakeQuotes(strarr(J)) & ", " 
     Next J 
     strarr(conAnzahlFelder) = MakeQuotes(strarr(conAnzahlFelder)) & ")" 

     ' Anfügeabfrage zusammenbasteln 
     strSql = "Insert Into " & Zieltabelle & " (" 
     For J = 1 To conAnzahlFelder 
      strSql = strSql & "f" & Trim(CStr(J - 1)) & ", " 
     Next J 
     strSql = strSql & "f" & Trim(CStr(conAnzahlFelder)) & ") " 
     strSql = strSql & "Values (" 
     For J = 1 To conAnzahlFelder + 1 
      strSql = strSql & strarr(J - 1) 
     Next J 

     MsgBox strSql 
     DoCmd.RunSQL strSql 
     End Function 

我該如何解決這個問題呢?

回答

1

代碼中存在很多問題。但是,爲了回答你的問題

第一:的

Private Function SaveXML(ByVal strarr(), DFCC As String, SCT As String, ByVal Zieltabelle As String) 

代替

Private Function SaveXML(strarr(), DFCC As String, SCT As String, ByVal Zieltabelle As String) 

谷歌爲BYVAL和爲ByRef的區別:

嘗試。

二:

你真的應該使用選項每個模塊開始明確。你使用了很多未聲明的變量。這可能會導致其他問題。

第三:

Dim strSql, strXmlItem(), strA2l, strHex As String 

僅產生一個字符串變量(strHex)。如果使用該語法,則其他語句被聲明爲Variant。這適用於其他一些語言,但不適用於VBA!

以及最後但並非最不重要的:

聲明功能,但你不返回它的任何價值。要麼你不想返回一些東西(那麼你不應該把它聲明爲Function),或者你應該提供一個返回值。

+1

呃......那很糟糕。然後我猜你必須使用一個Collection而不是Array。處理一個Collection並不是那麼容易,但提供了更多的靈活性,如果我沒有記錯,它可以通過ByVal – cboden 2014-10-29 10:19:16