Variable extern übergeben an VBA

Guten Tag,

ich habe einen VBA-Code:

’ Tabelle „Haupt“ löschen, damit es keine Datenvermehrung gibt
DoCmd.DeleteObject acTable, „Haupt“

’ Tabelle importieren
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel2, _
„Haupt“, „\p150\c$\Script\TelefonbuchV2\ExportTmp\qryHaupt_ExportTelefonbuch.xls“, True

Nun möchte ich aber, dass es möglich ist, das die Zahl p150 quasi eine externe Variable ist, welche z.B. in einer Textdatei oder Excel Tabelle hinterlegt ist.
Ansonsten bin ich ja immer gezwungen, in Acces zu gehen und diese Variablen in den ganzen Codes zu ändern.
Ist soetwas möglich? Hat jemand vielleicht einen Lösungsvorschlang bzw. Ansatz für mich?

Vielen Dank schonmal!

MfG Benjamin

leider nein

Hy Benjamin,

du kannst natürlich den kompletten Datenpfad in einer ASCII (Text)Datei ablegen.
Das wird bei vielen Programmen so getan, die Textdateien heissen dan meitens .ini mit Nachnamen.

Dann legst du eine Globale Variable an die du beim öffnen des Formulares „füllst“.

Am besten legst du diese ASCII Datei in dem Ordner in dem auch die eigentliche ACCESS Datenbank liegt an, dann hast du immer den gleichen Dateipfad.

Hier die Kurzform zum öffnen einer Textdatei.

sub OpenTxt()
Dim Pfad as String
Dim FF as Long
Dim Buffer as String
FF = FreeFile
Pfad = GetPath
Pfad = Pfad & „IniDatei.ini“

Open Pfad For Input As FF
Line Input FF, buffer
Debug.Print buffer
Close FF ’ Datei schließen
End Sub

Und so bekommst du den Dateipfad deiner ACCESS Datei.

Public Function GetPath() As String
GetPath = CurrentProject.Path & „“
End Function

viel Spass beim Programieren

Frank

Hallo Benjamin,

wenn ich richtig verstehe, arbeitest Du übergreifend in Access, Excel, Word. Da habe ich wenig Erfahrung.
Aber:
„p150“ ist in meinen Augen einfach eine Zeichenkette. Und diese Zeichenkette ist in eine größere Zeichenkette eingearbeitet.
Du müsstest also eine Variable als String definieren und den Pfad aus einem festen und einem veränderlichen Teil zusammensetzen können.

Nehmen wir an, Deine Variable steht im aktiven Excel Arbeitsblatt in der Zelle A1 (wenn nicht, müsste .Value von woanders bezogen werden).

'Deklaration
Dim Pfad as String
Dim Fix as String
Dim ExVariable as String

'Variable belegen
ExVariable = ActiveWorkbook.ActiveSheet.Cells(1, 1).Value
'fester Teil des Pfades
Fix = „\c$\Script\TelefonbuchV2\ExportTmp\qryHaupt_ExportTelefonbuch.xls“
'Pfad zusammenbasteln
Pfad = „\“ & ExVariable & Fix

'Pfad prüfen
MsgBox("Pfad ist jetzt: " & Pfad)

Hilft Dir das?

MfG MwieMichel

Moin,

Du müsstest dies:

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel2, _
„Haupt“,"\p150\c$\Script\TelefonbuchV2\ExportTmp\qryHaupt_ExportTelefonbuch.xls", True

auch so schreiben können:

dim extTab as String

extTab = „\p150\c$\Script\TelefonbuchV2\ExportTmp\qryHaupt_ExportTelefonbuch.xls“

DoCmd.TransferSpreadsheet acImport, AcSpreadsheetTypeExcel2,„Haupt“,extTab, True

dann kannst Du auch die Variable extTAB zusammensetzen.
Mal angenommen TabNam enthält den Namen der Tabelle.

Dann wäre

extTab = „\“ & TabNam & „\c$\Script\TelefonbuchV2\ExportTmp\qryHaupt_ExportTelefonbuch.xls“

die Füllung der Variable.

Gruß
Leo

Hallo, guten Morgen,
tut mir leid. Hier kann ich nicht weiter helfen.

Hallo Benjamin,

kann Dir leider aus zeitlichen Gründen nicht detailiert helfen. Aber Du kannst für den Link natürlich eine Variable verwenden welche du mit dem Inhalt aus z.B. dem von Dir angesprochen Textfile füllst.

Du kannst z.B.

Dim FF as integer
Dim var as string
FF = FreeFile
Open TextfilePfad for Input as #FF
Input #FF, var
Close #FF

jetzt hast Du in der Stringvariable var den Inhalt der ersten Zeile eines Testfiles stehen.

Hoffe, das hilft Dir.

Gruß
Andreas

Hallo Benjamin,
ich kann Dir folgende Lösung per Access ohne Code Änderung anbieten:

  1. Erstelle eine Tabelle z.B. „tabVariabeln“
    folgende Felder:
    txVariabel, als Text
    txWert, als Text
  2. In der Tabelle trägst Du z.B folgendes ein:
    txVariabel = svPfad
    txWert = \p150\
  3. An den Stellen wo Du den Wert benötigst rufst Du die Variabel aus der Tabelle ab:
    dim svPfad as text
    svpfad = dlookup("[txWert]", „tabVariabeln“,"[txVariabel]=‚svPfad‘"

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel2, _
„Haupt“, svPfad & „c$\Script\TelefonbuchV2\ExportTmp\qryHaupt_ExportTelefonbuch.xls“, True

  1. Vielleicht noch eine Eingabemaske wo Du die Variabeln ändern kannst.

Ich habe so das Problem bei mir gelöst bei sich ändernden Pfadangaben.

Gruß
Thomas

Vielen Dank. :smile:

Vielen Dank für deine Hilfe. =)

Ich danke dir! =)

Vielen Dank! =)

Hallo enny86,
etwas spät, aber ich schreib dennoch was. Vl. ist es nicht mehr nötig aber wenn’s andere noch brauchen.
Access kennt beim Starten Befehlsparameter, aber m.E. kein frei zu definierenden. Also bleibt nur die möglichkeit in einer Textdatei den Servernamen zu speichern und anschließend die Tabellen in die DB zu verknüpfen.
(„p150“ ist doch ein Servername?)
>>>"\p150\c$\Script\TelefonbuchV2\ExportTmpqryHaupt_ExportTelefonbuch.xls"
ist erstmal nichts anderes als eine Zeichenkette

Du kannst dann eine neue Zeichenkette bilden wenn Du den Werte aus der verknüpften Tabelle ausliest.
dim sPfad as string
sPfad = & „\c$\Script\TelefonbuchV2\ExportTmpqryHaupt_ExportTelefonbuch.xls“

Für das Lesen aus einer Tabelle kannst du diesen Code benutzen:
der Parameter „u“ ist zur Identifikation des Datensatzes, denn es könnten ja mehrere Zeilen in der Texttabelle sein.

Public Function getUserNamen(u As String) As Variant
On Error GoTo getUserNamen_err
Dim ssql As String
Dim rsTemp As ADODB.Recordset

Set rsTemp = New ADODB.Recordset

ssql = "select * from v_UserNamen where uid = " & „’“ & u & „’“

rsTemp.Open ssql, CurrentProject.Connection, adOpenDynamic, adLockOptimistic

With rsTemp
If .EOF Or .BOF Then
getUserNamen = False
Else
getUserNamen = !namen
End If
End With

rsTemp.Close

getUserNamen_exit:
Exit Function

getUserNamen_err:
GoTo getUserNamen_exit

End Function

Guten Tag,

ich habe einen VBA-Code:

’ Tabelle „Haupt“ löschen, damit es keine Datenvermehrung gibt
DoCmd.DeleteObject acTable, „Haupt“

’ Tabelle importieren
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel2, _
„Haupt“,
„\p150\c$\Script\TelefonbuchV2\ExportTmp\qryHaupt_ExportTelefo
nbuch.xls“, True

Nun möchte ich aber, dass es möglich ist, das die Zahl p150
quasi eine externe Variable ist, welche z.B. in einer
Textdatei oder Excel Tabelle hinterlegt ist.
Ansonsten bin ich ja immer gezwungen, in Acces zu gehen und
diese Variablen in den ganzen Codes zu ändern.

Danke für deine Antwort, Frage hatte sich inzwischen erledigt! =)

Gruß Benjamin

Danke, aber die Frage hat sich inszwischen erledigt. =)