Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Zellbezug in VBA automatisch aendern

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Zellbezug in VBA automatisch aendern (12744 mal gelesen)
stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 14. Mrz. 2009 20:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Guten Abend,

ich habe ein Makro wie z.B. dieses:

Code:

Private Sub Worksheet_Change(ByVal Target As Range)   
    If Not Intersect(Target, Range("A1")) Is Nothing Then
            Application.Run "Testmakro"
    End If

end sub


Damit wird ja immer nach Eingabe eines Wertes in Zelle A1 das "testmakro" gestartet. Wenn ich nun aber im Excelsheet z.B. eine neue Zeile einfüge wird aus Zelle A1-->B1. In Excel wird dies automatisch korrigiert, z.B. wenn die Zelle in einer Formel verwendet wird. Aber im Makro wird dies Änderung nicht erkannt und bei Range muss "A1" muss händisch durch "B1" erstetzt werden. Kann man den Zellbezug in VBA auch so vornehmen, das er sich nach einfügen neuer Zeilen/Spalten automatisch mitändert, so wie man das aus Excel kennt?

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

runkelruebe
Moderator
Straßen- / Tiefbau




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 14. Mrz. 2009 21:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hallo Stefan,
Ich glaube, am einfachsten wäre das mit Namen zu bewerkstelligen.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("TEST")) Is Nothing Then
            MsgBox "Änderung"
    End If
End Sub

Wobei sich TEST auf Deine Zelle bezieht.
Namen vergibst Du z.B. über die Tastenkombi STRG+F3
Oder Menü > Einfügen > Namen (glaube ich, dass das früher mal da war, ich hab hier nur XL2007 da ist es auf der Registerkarte "Formeln" > Namen definieren zu finden)

------------------
Gruß,
runkelruebe          Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...

System-Info     Excel -Suche    RuA-Suche     FAQ-ACAD     Hilfe zu CAD.de 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 14. Mrz. 2009 21:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke rübe, genau das hab ich gesucht.

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 15. Mrz. 2009 17:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo nochmal,

noch eine Frage zu den Namen:

wenn ich für einen Zellbereich (z.B. in Mappe1 auf Tabelle1 benene ich den Zellbereich A1:A10 mit Franz   ) einen Namen vergebe, dann kann das ja global oder lokal geschehen. In meinem Fall soll der Name lokal sein, deshalb muss ich gemaß http://www.online-excel.de/excel/singsel.php?f=157  den Namen des Tabellenblattes davorsetzten, soweit ist es mir klar. Wenn ich diesen Namen nun als Wertebereich für ein Diagramm verwenden möchte, gebe ich im Diagramm (welches sich auf Tabellenseite1 befindet) als Datenquelle statt  =A1:A10 ='Tabelle1'!Franz als Wertebereich ein (lokal, deshalb Name des Tabellenblattes vorangestellt).

Wenn ich nun das Tabellenblatt1 (samt Diagramm) kopiere wird Tabelle1(2) daraus, der Datenbereich des mitkopierten neuen Diagramms bezieht sich aber nicht wie gewünscht auf die Zelle A1:A10 in Tabelle1(2) sondern es erscheint unter Datenquelle des neuen Diagramms ={100.200.300 usw} wobei 100, 200,... die Zahlenwerte aus A1:A10 sind, aber die aus dem ursprünglichen Tabellenblatt1 und nicht der Kopie Tabelle1(2). Was kann man tun, das die Datenquelle automatisch aus dem neuen automatisch von Excel erzeugten lokalen Namen 'Tabelle1(2)'!Franz besteht?

Grund für die Frage: ich möchte mit BEREICH.VERSCHIEBEN arbeiten und dadurch im Diagramm einen veränderlichen Wertebereich anzeigen lassen, deshalb brauche ich einen Namen und kann nicht einfach den festen Zellbereich als Wertebereich eingeben.

PS: ist bei der Verwendung von Zellbezügen in VBA eigentlich nicht generell die Verwendung von Namen anzuraten, da man sonst nach jedem Einfügen neuer Zeilen/Spalten das Problem hat, dass die Bezüge nicht mehr stimmen?

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thomas Ramel
Mitglied
Project Manager / Engineering


Sehen Sie sich das Profil von Thomas Ramel an!   Senden Sie eine Private Message an Thomas Ramel  Schreiben Sie einen Gästebucheintrag für Thomas Ramel

Beiträge: 55
Registriert: 31.01.2007

erstellt am: 16. Mrz. 2009 15:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Grüezi Stefan

Zitat:
Original erstellt von stefga:
Wenn ich nun das Tabellenblatt1 (samt Diagramm) kopiere wird Tabelle1(2) daraus, der Datenbereich des mitkopierten neuen Diagramms bezieht sich aber nicht wie gewünscht auf die Zelle A1:A10 in Tabelle1(2) sondern es erscheint unter Datenquelle des neuen Diagramms ={100.200.300 usw} wobei 100, 200,... die Zahlenwerte aus A1:A10 sind, aber die aus dem ursprünglichen Tabellenblatt1 und nicht der Kopie Tabelle1(2). Was kann man tun, das die Datenquelle automatisch aus dem neuen automatisch von Excel erzeugten lokalen Namen 'Tabelle1(2)'!Franz besteht?

Ja, das ist leider korrekt :-)

Der Namen wird zwar mit kopert und ist im Tabellenblatt mit dem neuen Namen des Tabellenblattes vorhanden, aber die Datenreihe des Diagramms wird leider nicht mit angpasst sondern es werden die zum Zeitpunkt des Kopierens aktuellen Werte fix als Array in die Datenreihe geschrieben.

Ich bin über diesen Umstand auch schon gestolpert und konnte nur mittels VBA dafür sorgen, dass das einigermassen geklappt hat.

Erst ab xl2007 hat sich dies geändert, da wird der neue Name dann korrekt übernommen und angewendet.
(Vielleicht ein Grund für ein Update?)


Zitat:
Original erstellt von stefga:
Grund für die Frage: ich möchte mit BEREICH.VERSCHIEBEN arbeiten und dadurch im Diagramm einen veränderlichen Wertebereich anzeigen lassen, deshalb brauche ich einen Namen und kann nicht einfach den festen Zellbereich als Wertebereich eingeben.

Ja, das halte ich auch sehr gerne so - ohne VBA lässt sich da vor xl2007 leider nicht viel machen....

Zitat:
Original erstellt von stefga:
PS: ist bei der Verwendung von Zellbezügen in VBA eigentlich nicht generell die Verwendung von Namen anzuraten, da man sonst nach jedem Einfügen neuer Zeilen/Spalten das Problem hat, dass die Bezüge nicht mehr stimmen?

Man könnte die Tabelle diesbezüglich ja auch schützen, doch die Verwendung von benannten Zellen ist in der Tat eine Erleichterung und kann einiges an Fehlern vermeiden, die Durch User-Manipulationen entstehen können.

------------------
Mit freundlichen Grüssen

Thomas Ramel

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 16. Mrz. 2009 20:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank, auch wenns leider nicht die Antwort ist, die ich hören wollte.

Zitat:
Man könnte die Tabelle diesbezüglich ja auch schützen...
Macht in meinem Fall keinen Sinn, da ich die Tabelle noch weiter ausbauen möchte. Und wenn ich dann eben eine neue Zeile/Spalte einfüge stimmen die Zellbezüge in den zuvor erstellten Makros oft nicht mehr. Es geht nicht mal so sehr um Manipulationen durch andere user. Man hat ja auch selber nicht immer den Überblick, in welchem Makro man welchen Zellbezug jetzt korrigieren muss; mal ganz davon angesehn, dass es lästig und zeitaufwendig ist. Wenn man dann durch den verrutschten Zellbezug beim Makrodurchlauf eine Fehlermeldung bekommt, ist es ja noch halb so schlimm. Wenn aber das Makro trotzdem durchläuft und einen falschen Wert wegen des verrutschten Zellbezugs einliest, merkt man den Fehler im schlimmmsten Fall nichtmal. Mich wundert es deshalb, dass in VBA die Verwendung von fixen Zellbezügen per Namen nicht besonders üblich zu sein scheint (zumindest bin ich im Rahmen meiner bescheidenen Makroprogrammierkarriere noch nicht darauf gestoßen ).

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz