Невозможно определить, что происходит. К сожалению.
Option Explicit
Public startCell As Range
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
Dim i As Long
For i = LBound(arr) To UBound(arr)
If arr(i, 1) = stringToBeFound Then
IsInArray = True
Exit For
End If
Next
End Function
Sub AmendMaster()
Const cSource As Variant = "Sheet1" ' Source Worksheet Name/Index
Const cSrc1 As Variant = "A" ' Source Column 1 Letter/Number
Const cSrc2 As Variant = "AC" ' Source Column 2 Letter/Number
Const cSrcFirstR As Long = 3 ' Source First Row Number
Const cTarget As Variant = "Main_Data" ' Target Worksheet Name/Index
Const cTgt1 As Variant = "A" ' Target Column 1 Letter/Number
Const cTgt2 As Variant = "AB" ' Target Column 2 Letter/Number
Const cTgtFirstR As Long = 2 ' Target First Row Number
Dim ws As Worksheet ' Source Worksheet
Dim rngU As Range ' Union Range
Dim vntSrc As Variant ' Source Array
Dim vntTgt As Variant ' Target Array
Dim srcLastR As Long ' Source Last Row Number
Dim tgtLastR As Long ' Target Last Row Number
Dim i As Long ' Array Row Counter
Dim j As Long
With ThisWorkbook.Worksheets(cTarget)
tgtLastR = .Cells(.Rows.Count, cTgt1).End(xlUp).Row
vntTgt = .Range(.Cells(cTgtFirstR, cTgt1), .Cells(tgtLastR, cTgt2))
End With
For i = 1 To Workbooks.Count
If Workbooks(i).Name <> ThisWorkbook.Name _
And Windows(Workbooks(i).Name).Visible = True Then
Debug.Print Workbooks(i).Name
With Workbooks(i).Worksheets(cSource)
srcLastR = .Cells(.Rows.Count, cSrc1).End(xlUp).Row
vntSrc = .Range(.Cells(cSrcFirstR, cSrc1), _
.Cells(srcLastR, cSrc2))
End With
Exit For
End If
Next
For i = 1 To UBound(vntSrc)
For j = 1 To UBound(vntTgt)
If vntTgt(i, UBound(vntTgt, 2)) = "PAID" _
And vntSrc(i, 1) = vntTgt(j, 1) Then
With ThisWorkbook.Worksheets(cTarget)
.Rows(j).Hidden = True ' Delete
End With
End If
Next
Next
End Sub
The technique used in Apache Commons uses the canonical path to the parent directory, not the file itself. I don't think that you can guarantee that a mismatch is due to a symbolic link, but it's a good indication that the file needs special treatment.
This is Apache code (subject to their license), modified for compactness.
public static boolean isSymlink(File file) throws IOException {
if (file == null)
throw new NullPointerException("File must not be null");
File canon;
if (file.getParent() == null) {
canon = file;
} else {
File canonDir = file.getParentFile().getCanonicalFile();
canon = new File(canonDir, file.getName());
}
return !canon.getCanonicalFile().equals(canon.getAbsoluteFile());
}
Java 1.6 не обеспечивает такой низкоуровневый доступ к файловой системе. Похоже, NIO 2 , который должен быть включен в Java 1.7, будет иметь поддержку символических ссылок. Доступен проект нового API . Здесь упоминаются символические ссылки , , при этом возможно создание и , следуя . Я не совсем уверен, какой метод следует использовать, чтобы узнать, является ли файл символической ссылкой. Есть список рассылки для обсуждения NIO 2 - возможно, они узнают.
Похоже, что getCanonicalPath ()
может делать другие вещи, которые могут отличать его от абсолютного пути.
Этот метод сначала преобразует этот путь в абсолютный формировать при необходимости, как будто вызывая метод getAbsolutePath (), а затем отображает его в его уникальную форму системно-зависимым способом. Обычно это включает удаление избыточных имен, таких как "." и ".." из пути, разрешения символических ссылок (на платформах UNIX) и преобразования букв дисков в стандартный регистр (на платформах Microsoft Windows).
Но это может работать в подавляющем большинстве случаев использования; Ваш пробег может отличаться.
и затем отображает его в его уникальную форму системно-зависимым способом. Обычно это включает удаление избыточных имен, таких как "." и ".." из пути, разрешения символических ссылок (на платформах UNIX) и преобразования букв дисков в стандартный регистр (на платформах Microsoft Windows).Но это может работать в подавляющем большинстве случаев использования; Ваш пробег может отличаться.
и затем отображает его в его уникальную форму системно-зависимым способом. Обычно это включает удаление избыточных имен, таких как "." и ".." из пути, разрешения символических ссылок (на платформах UNIX) и преобразования букв дисков в стандартный регистр (на платформах Microsoft Windows).Но это может работать в подавляющем большинстве случаев использования; Ваш пробег может отличаться.