
Option Explicit
'nel modulo di classe del foglio
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Excel.Range
Dim TuoRng As Excel.Range
Set TuoRng = [a1]
Static SalvaLoop As Boolean
If SalvaLoop Then Exit Sub
SalvaLoop = True
If TypeName(Intersect(Target, TuoRng)) = "Range" Then
Set rng = A1FoglioLog("FoglioLog")
rng.Value = TuoRng.Value
rng.Offset(0, 1) = Environ("username")
rng.Offset(0, 2) = Now
End If
SalvaLoop = False
End Sub
'in un modulo standard (per me meglio)
'oppure nel modulo di classe del foglio
'insieme alla routine di evento
Function A1FoglioLog(sSh As String) As Excel.Range
Dim Sh As Excel.Worksheet
Dim Wb As Excel.Workbook
Dim r As Long
On Error Resume Next
Set Wb = ThisWorkbook
Set Sh = Wb.Worksheets(sSh)
If Err Then
Err.Clear
Set A1FoglioLog = Wb.Worksheets.Add().Range("A1")
A1FoglioLog.Parent.Name = sSh
Else
r = UltimaRiga(Sh) + 1
If r > Sh.Cells.Rows.Count Then
Sh.Rows("2:1001").Delete Shift:=xlUp
r = r - 1000
End If
Set A1FoglioLog = Sh.Cells(r, 1)
End If
On Error GoTo 0
End Function
Function UltimaRiga(Optional Sh As Worksheet, _
Optional rng As Range) As Long
'By Norman Jones modificata restituisce
'l'ultima riga valorizzata
'restituisce 0 se il foglio è pulito
'passando Sh verrà ignorato Rng
'passando Rng verrà ignorato Sh
'non passando argomenti verrà ricercata
'l'ultima riga valorizzata del foglio
'attivo
'utilizzata come UDF è consigliabile
'passare Rng
If Sh Is Nothing Then
If rng Is Nothing Then
Set rng = [a1].Parent.UsedRange
End If
Else
Set rng = Sh.UsedRange
End If
On Error Resume Next
UltimaRiga = rng.Find(What:="*", _
After:=rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function
|
Sub LinkList()
Dim Links As Variant
' Obtain an array for the links to Excel workbooks
' in the active workbook.
Links = ActiveWorkbook.LinkSources(xlOLELinks)
' If the Links array is not empty, then open each
' linked workbook. If the array is empty, then
' display an error message.
If Not IsEmpty(Links) Then
For I = 1 To Ubound(Links)
ActiveWorkbook.SetLinkOnData Links(i), "LinkChange"
Next I
Else
MsgBox "This workbook does not contain any links " & _
"to other workbooks"
End If
End Sub |
Option Explicit
Dim rngbase
Private Sub Workbook_Open()
rngbase = [foglio1!a1].Value
End Sub
'nel modulo di classe del foglio
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Dim rng As Excel.Range
Dim TuoRng As Excel.Range
Set TuoRng = [foglio1!a1]
If TuoRng.Parent.Name = Sh.Name Then
If TuoRng.Value <> rngbase Then
Set rng = A1FoglioLog("FoglioLog")
rng.Value = TuoRng.Value
rng.Offset(0, 1) = Environ("username")
rng.Offset(0, 2) = Now
rngbase = TuoRng.Value
End If
End If
End Sub
Function A1FoglioLog(sSh As String) As Excel.Range
Dim Sh As Excel.Worksheet
Dim Wb As Excel.Workbook
Dim r As Long
On Error Resume Next
Set Wb = ThisWorkbook
Set Sh = Wb.Worksheets(sSh)
If Err Then
Err.Clear
Set A1FoglioLog = Wb.Worksheets.Add().Range("A1")
A1FoglioLog.Parent.Name = sSh
Else
r = UltimaRiga(Sh) + 1
If r > Sh.Cells.Rows.Count Then
Sh.Rows("2:1001").Delete Shift:=xlUp
r = r - 1000
End If
Set A1FoglioLog = Sh.Cells(r, 1)
End If
On Error GoTo 0
End Function
Function UltimaRiga(Optional Sh As Worksheet, _
Optional rng As Range) As Long
'By Norman Jones modificata restituisce
'l'ultima riga valorizzata
'restituisce 0 se il foglio è pulito
'passando Sh verrà ignorato Rng
'passando Rng verrà ignorato Sh
'non passando argomenti verrà ricercata
'l'ultima riga valorizzata del foglio
'attivo
'utilizzata come UDF è consigliabile
'passare Rng
If Sh Is Nothing Then
If rng Is Nothing Then
Set rng = [a1].Parent.UsedRange
End If
Else
Set rng = Sh.UsedRange
End If
On Error Resume Next
UltimaRiga = rng.Find(What:="*", _
After:=rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function
|
Option Explicit
Dim rngbase
Private Sub Workbook_Open()
rngbase = [foglio1!a1].Value
End Sub
'nel modulo di classe del foglio
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Dim rng As Excel.Range
Dim TuoRng As Excel.Range
Set TuoRng = [foglio1!a1]
If TuoRng.Parent.Name = Sh.Name Then
If TuoRng.Value <> rngbase Then
Set rng = A1FoglioLog("FoglioLog")
rng.Value = TuoRng.Value
rng.Offset(0, 1) = Environ("username")
rng.Offset(0, 2) = Now
rng.Offset(0, 3) = VBA.Year(Now)
rng.Offset(0, 4) = VBA.Month(Now)
rng.Offset(0, 5) = VBA.Day(Now)
rng.Offset(0, 6) = VBA.Hour(Now)
rng.Offset(0, 7) = VBA.Minute(Now)
rngbase = TuoRng.Value
End If
End If
End Sub
Function A1FoglioLog(sSh As String) As Excel.Range
Dim Sh As Excel.Worksheet
Dim Wb As Excel.Workbook
Dim r As Long
On Error Resume Next
Set Wb = ThisWorkbook
Set Sh = Wb.Worksheets(sSh)
If Err Then
Err.Clear
Set A1FoglioLog = Wb.Worksheets.Add().Range("A1")
A1FoglioLog.Parent.Name = sSh
Else
r = UltimaRiga(Sh) + 1
If r > Sh.Cells.Rows.Count Then
Sh.Rows("2:1001").Delete Shift:=xlUp
r = r - 1000
End If
Set A1FoglioLog = Sh.Cells(r, 1)
End If
On Error GoTo 0
End Function
Function UltimaRiga(Optional Sh As Worksheet, _
Optional rng As Range) As Long
'By Norman Jones modificata restituisce
'l'ultima riga valorizzata
'restituisce 0 se il foglio è pulito
'passando Sh verrà ignorato Rng
'passando Rng verrà ignorato Sh
'non passando argomenti verrà ricercata
'l'ultima riga valorizzata del foglio
'attivo
'utilizzata come UDF è consigliabile
'passare Rng
If Sh Is Nothing Then
If rng Is Nothing Then
Set rng = [a1].Parent.UsedRange
End If
Else
Set rng = Sh.UsedRange
End If
On Error Resume Next
UltimaRiga = rng.Find(What:="*", _
After:=rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function
|
Option Explicit
Dim rngbase
Dim lM As Long
Private Sub Workbook_Open()
rngbase = [foglio1!a1].Value
lM = VBA.Minute(Now)
End Sub
'nel modulo di classe del foglio
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Dim rng As Excel.Range
Dim TuoRng As Excel.Range
Set TuoRng = [foglio1!a1]
If TuoRng.Parent.Name = Sh.Name Then
If TuoRng.Value <> rngbase Then
If VBA.Minute(Now) <> lM Then
Application.EnableEvents = False
Set rng = A1FoglioLog("FoglioLog")
rng.Value = TuoRng.Value
rng.Offset(0, 1) = Environ("username")
rng.Offset(0, 2) = Now
rng.Offset(0, 3) = VBA.Year(Now)
rng.Offset(0, 4) = VBA.Month(Now)
rng.Offset(0, 5) = VBA.Day(Now)
rng.Offset(0, 6) = VBA.Hour(Now)
rng.Offset(0, 7) = VBA.Minute(Now)
rngbase = TuoRng.Value
lM = VBA.Minute(Now)
Application.EnableEvents = True
End If
End If
End If
End Sub
Function A1FoglioLog(sSh As String) As Excel.Range
Dim Sh As Excel.Worksheet
Dim Wb As Excel.Workbook
Dim r As Long
On Error Resume Next
Set Wb = ThisWorkbook
Set Sh = Wb.Worksheets(sSh)
If Err Then
Err.Clear
Set A1FoglioLog = Wb.Worksheets.Add().Range("A1")
A1FoglioLog.Parent.Name = sSh
Else
r = UltimaRiga(Sh) + 1
If r > Sh.Cells.Rows.Count Then
Sh.Rows("2:1001").Delete Shift:=xlUp
r = r - 1000
End If
Set A1FoglioLog = Sh.Cells(r, 1)
End If
On Error GoTo 0
End Function
Function UltimaRiga(Optional Sh As Worksheet, _
Optional rng As Range) As Long
'By Norman Jones modificata restituisce
'l'ultima riga valorizzata
'restituisce 0 se il foglio è pulito
'passando Sh verrà ignorato Rng
'passando Rng verrà ignorato Sh
'non passando argomenti verrà ricercata
'l'ultima riga valorizzata del foglio
'attivo
'utilizzata come UDF è consigliabile
'passare Rng
If Sh Is Nothing Then
If rng Is Nothing Then
Set rng = [a1].Parent.UsedRange
End If
Else
Set rng = Sh.UsedRange
End If
On Error Resume Next
UltimaRiga = rng.Find(What:="*", _
After:=rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function
|
Option Explicit
Dim rngbase
Dim lM As Long
Private Sub Workbook_Open()
rngbase = ThisWorkbook. _
Worksheets("foglio1").Range("A1").Value '< |
Option Explicit
Dim rngbase
Dim lM As Long
Private Sub Workbook_Open()
rngbase = ThisWorkbook. _
Worksheets("foglio1").Range("A1").Value '< |
Option Explicit
Dim rngbase
Dim lM As Long
Private Sub Workbook_Open()
rngbase = ThisWorkbook. _
Worksheets("foglio1").Range("A1").Value '--adatta ai tuoi riferimenti
lM = VBA.Minute(Now)
End Sub
'nel modulo di classe del foglio
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Dim rng As Excel.Range
Dim TuoRng As Excel.Range
Set TuoRng = ThisWorkbook. _
Worksheets("foglio1").Range("A1") '--adatta ai tuoi riferimenti
If TuoRng.Parent.Name = Sh.Name Then
If TuoRng.Value <> rngbase Then
If VBA.Minute(Now) <> lM Then
Application.EnableEvents = False
Set rng = A1FoglioLog("FoglioLog")
rng.Value = TuoRng.Value
rng.Offset(0, 1) = Environ("username")
rng.Offset(0, 2) = Now
rng.Offset(0, 3) = VBA.Year(Now)
rng.Offset(0, 4) = VBA.Month(Now)
rng.Offset(0, 5) = VBA.Day(Now)
rng.Offset(0, 6) = VBA.Hour(Now)
rng.Offset(0, 7) = VBA.Minute(Now)
rngbase = TuoRng.Value
lM = VBA.Minute(Now)
Application.EnableEvents = True
End If
End If
End If
End Sub
Function A1FoglioLog(sSh As String) As Excel.Range
Dim Sh As Excel.Worksheet
Dim Wb As Excel.Workbook
Dim r As Long
On Error Resume Next
Set Wb = ThisWorkbook
Set Sh = Wb.Worksheets(sSh)
If Err Then
Err.Clear
Set A1FoglioLog = Wb.Worksheets.Add().Range("A1")
A1FoglioLog.Parent.Name = sSh
Else
r = UltimaRiga(Sh) + 1
If r > Sh.Cells.Rows.Count Then
Sh.Rows("2:1001").Delete Shift:=xlUp
r = r - 1000
End If
Set A1FoglioLog = Sh.Cells(r, 1)
End If
On Error GoTo 0
End Function
Function UltimaRiga(Optional Sh As Worksheet, _
Optional rng As Range) As Long
'By Norman Jones modificata restituisce
'l'ultima riga valorizzata
'restituisce 0 se il foglio è pulito
'passando Sh verrà ignorato Rng
'passando Rng verrà ignorato Sh
'non passando argomenti verrà ricercata
'l'ultima riga valorizzata del foglio
'attivo
'utilizzata come UDF è consigliabile
'passare Rng
If Sh Is Nothing Then
If rng Is Nothing Then
Set rng = [a1].Parent.UsedRange
End If
Else
Set rng = Sh.UsedRange
End If
On Error Resume Next
UltimaRiga = rng.Find(What:="*", _
After:=rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function
|
