Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Только способ, которым я могу думать, состоит в том, чтобы связать название рабочего листа со ссылкой на ячейку, следующим образом:
Dim cell As Range
Dim cellAddress As String
Set cell = ThisWorkbook.Worksheets(1).Cells(1, 1)
cellAddress = cell.Parent.Name & "!" & cell.Address(External:=False)
РЕДАКТИРОВАНИЕ:
Изменяют последнюю строку к:
cellAddress = "'" & cell.Parent.Name & "'!" & cell.Address(External:=False)
, если Вы хотите, чтобы он работал, даже если существуют пробелы или другие забавные символы на имя листа.
Ben прав. Я также не могу думать ни о каком способе сделать это. Я предложил бы или метод, который Ben рекомендует, или следующее для снятия изоляции с имени Рабочей книги.
Dim cell As Range
Dim address As String
Set cell = Worksheets(1).Cells.Range("A1")
address = cell.address(External:=True)
address = Right(address, Len(address) - InStr(1, address, "]"))
[редактирование по телефону 21.04.2009]
Как Micah указал, это только работает при именовании этого
конкретный диапазон (следовательно.Name кто-либо?) Да, ой!
[/редактирование]
Немного поздно стороне, я знаю, но в случае, если кто-либо еще ловит это в поиске Google (как я просто сделал), Вы могли также попробовать следующее:
Dim cell as Range
Dim address as String
Set cell = Sheet1.Range("A1")
address = cell.Name
Это должно возвратить полный адрес, что-то как "=Sheet1! Дюйм за 1$A$.
Принятие Вас не хочет знака "равно", можно снять изоляцию с него с функцией Замены:
address = Replace(address, "=", "")
Почему бы просто не вернуть имя рабочего листа с адрес = cell.Worksheet.Name тогда вы можете снова объединить адрес следующим образом address = cell.Worksheet.Name & "!" & cell.Address
Функция рабочего листа Address ()
делает именно это . Поскольку он недоступен через Application.WorksheetFunction
, я придумал решение, используя метод Evaluate ()
.
Это решение позволяет Excel обрабатывать пробелы и другие забавные символы в имя листа, что является хорошим преимуществом по сравнению с предыдущими ответами.
Пример:
Evaluate("ADDRESS(" & rng.Row & "," & rng.Column & ",1,1,""" & _
rng.Worksheet.Name & """)")
возвращает в точности «Sheet1! $ A $ 1» с объектом Range
с именем rng
, ссылающимся на ячейку A1 на листе Sheet1.
Это решение возвращает только адрес первой ячейки диапазона, не адрес всего диапазона («Sheet1! $ A $ 1» vs «Sheet1! $ A $ 1: $ B $ 2»). Поэтому я использую его в пользовательской функции:
Public Function AddressEx(rng As Range) As String
Dim strTmp As String
strTmp = Evaluate("ADDRESS(" & rng.Row & "," & _
rng.Column & ",1,1,""" & rng.Worksheet.Name & """)")
If (rng.Count > 1) Then
strTmp = strTmp & ":" & rng.Cells(rng.Count) _
.Address(RowAbsolute:=True, ColumnAbsolute:=True)
End If
AddressEx = strTmp
End Function
Полная документация по функции рабочего листа Address () доступна на веб-сайте Office: https://support.office.com/en-us/article/ADDRESS- function-D0C26C0D-3991-446B-8DE4-AB46431D4F89