Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1396to1400
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Eingabe über Tabelle in VBA

Eingabe über Tabelle in VBA
28.12.2014 14:31:01
Peter
Hallo,
nochmals Bitte um Hilfe für eine Änderung in VBA:
Nachstehende Makros aus Herbers Archiv funktioniert einwandfrei.
benötige aber, dass die Eingabe über Tabelle erfolgt:
Option Explicit
Sub x()
Dim vb As Object, lngCounter As Long
lngCounter = 0
Workbooks.Open "C:\Users\Peter\Desktop\Mappe1.xlsm"
For Each vb In ActiveWorkbook.VBProject.VBComponents
lngCounter = lngCounter + ChangeCode(vb.codemodule, "Tag", "Nacht")
Next
ActiveWorkbook.Close True
MsgBox lngCounter, , "Änderungen"
End Sub

Function ChangeCode(vb As Object, strAlt As String, strNeu As String) As Long
Dim i&, strOneLine$, lngI As Long
lngI = 0
For i = 1 To vb.countoflines
strOneLine = vb.Lines(i, 1)
If InStr(strOneLine, strAlt) Then
vb.ReplaceLine i, Replace(strOneLine, strAlt, strNeu)
lngI = lngI + 1
End If
Next
ChangeCode = lngI
End Function
In Tabelle A1 steht "Tag" in B1 "Nacht". Wenn nun aus "Nacht" "Tag" wird soll dies über o.a. Makros geändert werden. Gleichzeitig muss dann der Wert von B1 mit A1 getauscht werden, um beim nächsten Mal den alten Wert zu finden.
Danke für Eure Hilfe.
Gruss Peter

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Das halte ich für eine ungünstige Organisation ...
28.12.2014 15:19:20
Luc:-?
…des Ganzen, Peter;
erklär mal, warum du das so machen willst!
Ansonsten s.m.AW unten!
Gruß, Luc :-?

AW: Das halte ich für eine ungünstige Organisation ...
28.12.2014 18:44:30
Peter
Hallo Luc,
ich habe eine bestehende Datei mit mehreren Tabellen und entsprechenden Makros. Diese sind im weitesten Sinne alle miteinander verbunden. Die Tabellennamen werden über die Zelle B1 übernommen. Und eben diesen Namen verwende ich in div. Makros. Wenn nun eine neue Datei angelegt wird gibt es neue Namen und diese müssen in die VBA. Jetzt habe ich die o.a. Anwendung gefunden, welche die Namen ändern würde, aber ich will dies entweder über eine MsgBox oder über Zelle A1 bzw. B1 übernehmen.
Auch wenn dies unprofessionell wirk und ist, wäre m.E. dies sehr sinnvoll. Ich brauche nur den Übergang,
dass die Werte aus den Zellen diese Zeile "lngCounter = lngCounter + ChangeCode(vb.codemodule, "Tag", "Nacht")" übernommen wird.
Gruss Peter

Anzeige
AW: Globale Variablen
28.12.2014 20:21:29
Gerd
Hallo Peter!
Option Explicit
Public MeinBlattEins As Worksheet

Sub XXYY()
Set MeinBlattEins = ActiveWorkbook.Worksheets(1).Range("B1").Text
MeinBlattEins.Activate
End Sub
Gruß Gerd

AW: Globale Variablen verstehe garnichts mehr!
29.12.2014 06:58:41
Peter
Hallo Gerd,
Danke für Deine Antwort. Aber ich verstehe nun überhaupt nicht, was ich damit anfangen soll, in Hinblick auf meine Sub x und Funktion ChangeCode.
Die Worte Tag und Nacht sind nur Beispiele und können sich jederzeit bei Neuanlage der Datei ändern. Mir fehlt der Bezug, wie ich das ganze anfangen soll.
Vielleicht kannst Du das besser beschreiben.
Gruss Peter

Anzeige
AW:Lösung selbst gefunden
29.12.2014 10:11:33
Peter
Hallo,
an alle die Interesse haben:
die Lösung lautet
Sub x1a()
Dim vb As Object
Dim strAlt As String
Dim strNeu As String
strAlt = Range("A1").Value
strNeu = Range("B1").Value
'Workbooks.Open "C:\Users\Peter\Desktop\Mappe1.xlsm"
For Each vb In ActiveWorkbook.VBProject.VBComponents
ChangeCode vb.codemodule, strAlt, strNeu
Next
ActiveWorkbook.Close True
End Sub
Allen ein gutes und gesundes neues Jahr.
Gruss Peter

Deine Lösung ist unnötig aufwendig, ...
29.12.2014 13:59:07
Luc:-?
…Peter;
Gerd und ich wollten dir sagen, dass man das auch ohne CodeÄnderung machen kann. Gerds Vorschlag zielt auf eine universelle Anwendbarkeit einer Variablen (bzw wohl doch eher Konstanten) im ganzen VBA-Projekt ab, während ich dir Konstanten vorgeschlagen habe. Diese könnten auch als benannte Konstante über einen definierten Namen in Xl geändert wdn. Dein Projekt müsste dann nur auf diese benannte Konstante zugreifen. Für eine entsprde Änderung der Konstanten ist dann der Nutzer verantwortlich, es sei denn, auch das kann automatisiert wdn. Aber, um das definitiv vorschlagen zu können, kennen wir dein Projekt zu wenig.
Merke: Eingriffe in den PgmCode eines lfd Projekts bergen Risiken und sollten nur vorgenommen wdn, wenn es keine andere Möglichkeit gibt.
Das ist aber in deinem Fall zu bezweifeln → du kennst sie nur nicht (s. deine Level-Angabe)!
Gruß, Luc :-?

Anzeige
AW:gib mir doch eine klare Auskunft
29.12.2014 19:04:09
Peter
Hallo Luc,
wie ich klar mitgeteilt habe und wie Du auch richtig erkannt hast, bin ich kein Fachmann in Hinblick auf VBA. Ich suche mir Hilfe und probiere aus, ob etwas funktioniert. Es existieren etwa 7 Makros in denen der auszuführende Begriff geändert werden muss. Dieser Wert wird aber nur geändert, wenn die Datei neu ausgeführt wird. Dann werden die Arbeitsblätter auf den entsprechenden Namen geändert und auch die sieben Makros. Während des Betriebs der Datei wird keinerlei Änderung der VBA mehr durchgeführt. Es geht ausschliesslich um die Neuanlage der Datei. Insoweit sehe ich kein echtes Risiko.
Es hätte mich aber schon interessiert, wie Eure Lösung aussehen würde.
Die nachfolgenden Zeilen stehen in den sieben Makros:
Worksheets("Grundtabelle Tag.").Copy After:=Worksheets("Grundtabelle Tag.")
If RngZ Like "*Tag. 2*" Then x = x + 1: Worksheets("Vorschau und Drucken").Cells(x, 21) = RngZ
If wksWS.Name Like "*Tag. 2*" Then wksWS.Select
Die erste Zeile ändert eine Grundtabelle Tag auf einen Namen um, der in einer Zelle steht. Hier könnte auf den Zusatz Tag ohnehin verzichtet werden.
Die zweite Zeile ist folgendem Makro enthalten:
Sub DatenübertragKonten_Click()
Dim RngZ As Range, x As Long
x = 1
'Worksheets("Vorschau und Drucken").Columns(21).ClearContents 'hier wird Ziel erst geleert
For Each RngZ In Worksheets("Vorschau und Drucken").Range("T2:T50")
If RngZ Like "*Tag. 2*" Then x = x + 1: Worksheets("Vorschau und Drucken").Cells(x, 21) = RngZ
Next
End Sub
und die dritte Zeile steht im Makro:
Sub Tabellen_auswählen_Ausblenden()
Dim wksWS As Worksheet
Application.ScreenUpdating = False  'schaltet den Bildschirm aus
Application.DisplayAlerts = False  'gibt eine Warnmeldung bei Fehler aus
For Each wksWS In ActiveWorkbook.Worksheets
If wksWS.Name Like "Tag. 2*" Then
wksWS.Select
Call ApplyAutoFilters_ein
End If
Next wksWS
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Jetzt hast Du die wesentlichen Makros, die geändert werden müssen. Jetzt wäre ich Dir dankbar, wenn Du mir eine Lösung geben könntest um eine Änderung der VBA zu verhindern. Ich habe keinen Plan wie ich diese Makros ändern könnte in Eurem Sinne mit Konstanten bzw. Variablen.
Vielleicht kannst Du die o.a. Makros entsprechend abändern. Besten Dank und ich wünsche Dir bereits eine gutes neues Jahr.
Gruss Peter

Anzeige
Die klare Auskunft hast du schon, nur verstehst...
30.12.2014 03:25:59
Luc:-?
…du sie wohl nicht so recht, Peter!
Mein Zeitfonds ist zum Jahreswechsel arg bemessen. Deshalb weiß ich nicht, ob ich noch dazu komme, mich näher mit deinen PgmCodes zu befassen, weshalb ich das mal noch auf offen setze. Komme wohl erst am 3.1. wieder dazu.
Falls das bis dahin nicht erledigt sein sollte, kannst du ja nochmal nachfragen (mit Link auf diesen Thread!).
Gruß + GutRutsch, Luc :-?

Evtl AW erfolgt dann ...
04.01.2015 10:57:12
Luc:-?
…wahrscheinlich erst im neuen Thread bzw hier.
Luc :-?
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige