Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1604to1608
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

VBA Formel

VBA Formel
28.01.2018 23:11:57
Dietmar
Hallo Experten,
ist es möglich aus einem Makro nach Ablauf in "diese Arbeitsmappe" geziehlt eine Zeile(Begriff) zu löschen damit beim nächsten Aufruf dieser Begriff nicht mehr angewählt wird.

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Formel
29.01.2018 05:33:19
Hajo_Zi
Zum Code Änderung muss Zugriff auf das VBA Projekt zugelassen werden.
Da dies tief in die Sicherheit geht, gebe ich dazu keine Auskunft.

Ich gebe keinen Dank für eine Rückmeldung, da ich durch solche Beiträge nicht meine Beitragszahl erhöhen muss.
Also ich schreibe keine Beiträge mit dem Betreff "Gerne u. Danke für die Rückmeldung....."
Rückmeldung ist ja in der Heutigen Zeit nicht üblich und die wenigen die eine Rückmeldung geben,
mögen mir das verzeihen, das kein Danke für eine Rückmeldung kommt.
Beiträge von Werner, Luc, robert und folgende lese ich nicht.
Anzeige
AW: VBA Formel
29.01.2018 05:59:39
Rainer
Hallo Dietmar,
das klingt schon sehr geheimnisvoll...
Was macht denn diese eine Zeile? Danach gibt es doch einen definierten Zustand.
Kannst du den nicht mit einer If-Anfrage prüfen und dann entscheiden, ob diese geheime Zeile ausgeführt werden soll?
Gruß,
Rainer
AW: VBA Formel
29.01.2018 10:12:50
Dietmar
Hallo Rainer,
Diese eine Zeile ist ein "Call-Aufruf von 6 Aufrufen in einer Installations-Sub.
Nach abarbeitung soll ein Call gelöscht werden damit er beim nächsten Neuaufruf nicht mehr abgearbeitet wird. Nix geheimnisvolles und gefährliches.
AW: VBA Formel
29.01.2018 10:21:18
Dietmar
'

Private Sub Workbook_Open()
'ActiveSheet.Unprotect
'Application.DisplayFormulaBar = False
'Application.OnKey "%{F11}", ""
'Call Abfrage      ' Diese Call soll nach Abarbeitung verschwinden
'Call RibbonOff
'Call Makro1
'Call Blattschutz
'Sheets("Meldeliste").Select
'If Range("U75").Value = "Lizenzgültigkeit 10 Jahre" Then
'Range("C3").Select
'End If
'ActiveSheet.Protect UserInterfaceOnly:=True
'End Sub

Anzeige
AW: VBA Formel
29.01.2018 10:34:10
Werner
Hallo Dietmar,
interessant wäre der Code des Makros Abfrage. Was macht diese Makro? Ggf. im Workbook_open eine entsprechende Prüfung, ob das Makro Abfrage schon ausgeführt wurde.
Darauf zielte auch der Beitrag von Rainer ab.
Ich persönlich würde von der Manipulation von Makrocode per Makro die Finger lassen.
Gruß Werner
AW: VBA Formel
29.01.2018 10:51:41
Rainer
Hallo Dietmar,
einfachste Lösung:

Private Sub Workbook_Open()
If Range("A1")  "Abfrage ok" Then Call Abfrage      ' Diese Call soll nach Abarbeitung  _
verschwinden
'End Sub
Sub Abfrage()
'Macht irgendwas
Range("A1") = "Abfrage ok"
End Sub

Anzeige
AW: VBA Formel
29.01.2018 15:37:10
Dietmar
https://www.herber.de/bbs/user/119368.xlsm
Hallo Rainer, ich tu mich ein wenig schwer mit der neuen Art zu uploaden.
Wenn es geklappt hat, ist das die Installation welche das Programm nur auf einem PC erlaubt.
VBA Makro soll nur auf einem PC laufen
30.01.2018 04:06:43
Rainer
Hallo Dietmar,
Jetzt hast du die Aufgabe endlich genannt: VBA Makro soll nur auf einem PC laufen.
Ich ändere mal den Betreff.
Leider habe ich keine Ahnung was dein Code macht und werde ihn auch nicht ausführen.
Aber ich habe den Code hier reinkopiert, so können ihn sich auch die Experten anschauen, ohne die XLSM Datei zu öffnen. Manche laden so etwas ungern herunter.
Ich stelle den Beitrag auf OFFEN und hoffe dass dir jemand helfen kann. Meine Kenntnisse übersteigt es.
Gruß,
Rainer

Private Sub Workbook_Open()
Call Installieren
Call Abfrage
End Sub


Sub Installieren()
Dim strSQL As String
Dim strWMI As String
Dim oWMI As Object
Dim objItem As Object
Dim stringFP As String
Dim stringPC As String
Dim stringEndNumber As String
Dim myFileSystemObject As Object
strSQL = "Select * from Win32_Processor"
strWMI = "winmgmts:\\.\root\cimv2"
Set oWMI = GetObject(strWMI).ExecQuery(strSQL)
For Each objItem In oWMI
stringPC = objItem.ProcessorId
Next
Set myFileSystemObject = CreateObject("Scripting.FileSystemObject")
stringFP = myFileSystemObject.GetDrive("C:").SerialNumber
stringEndNumber = stringPC & stringFP
Application.ScreenUpdating = False
Range("AD200").Value = stringFP
Range("AE200").Value = stringPC
Application.ScreenUpdating = True
' Call MakroFiltern
End Sub


Sub InstalLoeschen()
Dim Namen(1 To 3)
Namen(1) = "Modul1"
Namen(2) = "Modul7"
Namen(3) = "Modul2"
For x = 1 To UBound(Namen)
Set VBP = Application.VBE.ActiveVBProject
VBP.VBComponents.Remove VBP.VBComponents(Namen(x))
Next x
End Sub

Sub Abfrage()
Dim strSQL As String
Dim strWMI As String
Dim oWMI As Object
Dim objItem As Object
Dim stringFP As String
Dim stringPC As String
Dim stringEndNumber As String
Dim myFileSystemObject As Object
strSQL = "Select * from Win32_Processor"
strWMI = "winmgmts:\\.\root\cimv2"
Set oWMI = GetObject(strWMI).ExecQuery(strSQL)
For Each objItem In oWMI
stringPC = objItem.ProcessorId
Next
Set myFileSystemObject = CreateObject("Scripting.FileSystemObject")
stringFP = myFileSystemObject.GetDrive("C:").SerialNumber
stringEndNumber = stringPC & stringFP
Application.ScreenUpdating = False
Range("AD201").Value = stringFP
Range("AE201").Value = stringPC
Application.ScreenUpdating = True
' Call vergleichen
End Sub

Sub vergleichen()
Application.Wait (Now + TimeValue("00:00:05"))
If Range("AD200") = Range("AD201") Then
MsgBox "FP erfolgreich!"
End If
If Range("AE200") = Range("AE201") Then
MsgBox "PC erfolgreich!"
End If
If Range("AD200")  Range("AD201") Then
MsgBox "FP Fehler!"
'Call ausschalten
Else
If Range("AE200")  Range("AE201") Then
MsgBox "PC Fehler!"
'Call ausschalten
End If
End If
End Sub
Sub ausschalten()
Set objWMI = GetObject("WinMgmts:{impersonationLevel=impersonate, (Shutdown)}!/root/cimv2")
Set objItems = objWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem")
For Each objItem In objItems
objItem.Shutdown
Next objItem
End Sub

Sub MakroFiltern()
With ThisWorkbook.VBProject.VBComponents("DieseArbeitsmappe").CodeModule
.DeleteLines 2, 1
End With
'Call InstalLoeschen
End Sub

Anzeige
Witzig.
02.02.2018 14:12:58
mmat
Hallo Rainer,
naja, so schwierig ist das ja nicht. Offensichtlich soll das Ding nur auf einem PC laufen, dazu werden scheinbar Prozessor- und Festplatten-ID ausgelesen.
Damit die Initialisierung nicht immer wieder neu erfolgen kann, soll der entsprechende Aufruf im Codemodul via VBA gelöscht werden.
Der Witz ist: um eine Änderung via VBA im Code Modul vorzunehmen, muss ich es ungeschützt lassen, es darf kein Passwort oder sonstiger Schutzmechanismus existieren. Damit kann jeder auch nur halbwegs begabte Aushilfshacker das ganze Ding mit Leichtigkeit aushebeln.
Ich lasse den Beitrag bewusst offen.
vg, MM
Anzeige
AW: Witzig.
02.02.2018 23:46:13
Dietmar
Hallo MM,
witzig finde ich das nicht, in der Tat ich hebe es probiert und stimme Dir zu. HHHmmmmm... es wäre nett, wenn Du mir nun auf den Weg helfen würdest um mein Vorhaben zum Erfolg zu bringen.
AW: Witzig.
05.02.2018 04:36:47
Rainer
Hallo Dietmar,
dank des Witzboldes weiß ich jetzt wenigstens worum es geht.
Aber ich denke trotzdem, dass mein Tipp mit der Abfrage praktikabel ist.
Ich habe es auch so gemacht, als es darum ging, eine Art "Seriennummer" für die Arbeitsmappe zu definieren. Die Liste der Seriennummern steht in einem Blatt mit der Eigenschaft "xlVeryHidden". Damit ist es auch durch das VBA-Projekt-PW geschützt.
In deinem Fall also:

Private Sub Workbook_Open()
If Sheets("GEHEIM").Range("A1")  "Abfrage ok" Then Call Abfrage      ' Diese Call soll nach  _
Abarbeitung  _
verschwinden
'End Sub
Sub Abfrage()
'Macht irgendwas
Sheets("GEHEIM").Range("A1") = "Abfrage ok"
Sheets("GEHEIM").Visible = xlVeryHidden
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige