我有两张纸。一个具有完整数据,另一个基于第一个工作表上应用的过滤器。
数据表的名称:Data
已过滤工作表的名称:Hoky
为了简单起见,我只是拿一小部分数据。我的目标是根据过滤器从数据表中复制数据。我有一个宏,它以某种方式工作,但它的硬编码,是一个录制的宏。
我的问题是:
Sub TESTTHIS()
'
' TESTTHIS Macro
'
'FILTER
Range("F2").Select
Selection.AutoFilter
ActiveSheet.Range("$B$2:$F$12").AutoFilter Field:=5, Criteria1:="hockey"
'Data Selection and Copy
Range("C3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Hockey").Select
Range("E3").Select
ActiveSheet.Paste
Sheets("Data").Select
Range("D3").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Hockey").Select
Range("D3").Select
ActiveSheet.Paste
Sheets("Data").Select
Range("E3").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Hockey").Select
Range("C3").Select
ActiveSheet.Paste
End Sub
答案 0 :(得分:4)
最佳方式
下面的代码是复制DBExtract工作表中的可见数据,并将其粘贴到duplicateRecords工作表中,只有过滤后的值。我选择的范围是我的数据可以占用的最大范围。您可以根据需要进行更改。
Sub selectVisibleRange()
Dim DbExtract, DuplicateRecords As Worksheet
Set DbExtract = ThisWorkbook.Sheets("Export Worksheet")
Set DuplicateRecords = ThisWorkbook.Sheets("DuplicateRecords")
DbExtract.Range("A1:BF9999").SpecialCells(xlCellTypeVisible).Copy
DuplicateRecords.Cells(1, 1).PasteSpecial
End Sub
答案 1 :(得分:0)
当我需要从过滤表中复制数据时,我使用range.SpecialCells(xlCellTypeVisible).copy。范围是所有数据的范围(没有过滤器)。
示例:
Sub copy()
'source worksheet
dim ws as Worksheet
set ws = Application.Worksheets("Data")' set you source worksheet here
dim data_end_row_number as Integer
data_end_row_number = ws.Range("B3").End(XlDown).Row.Number
'enable filter
ws.Range("B2:F2").AutoFilter Field:=2, Criteria1:="hockey", VisibleDropDown:=True
ws.Range("B3:F" & data_end_row_number).SpecialCells(xlCellTypeVisible).Copy
Application.Worksheets("Hoky").Range("B3").Paste
'You have to add headers to Hoky worksheet
end sub
答案 2 :(得分:0)
我建议你以不同的方式做。
在下面的代码中,我将Sub TestThat()
'Declare the variables
Dim DataSh As Worksheet
Dim HokySh As Worksheet
Dim SportsRange As Range
Dim rCell As Range
Dim i As Long
'Set the variables
Set DataSh = ThisWorkbook.Sheets("Data")
Set HokySh = ThisWorkbook.Sheets("Hoky")
Set SportsRange = DataSh.Range(DataSh.Cells(3, 6), DataSh.Cells(Rows.Count, 6).End(xlUp))
'I went from the cell row3/column6 (or F3) and go down until the last non empty cell
i = 2
For Each rCell In SportsRange 'loop through each cell in the range
If rCell = "hockey" Then 'check if the cell is equal to "hockey"
i = i + 1 'Row number (+1 everytime I found another "hockey")
HokySh.Cells(i, 2) = i - 2 'S No.
HokySh.Cells(i, 3) = rCell.Offset(0, -1) 'School
HokySh.Cells(i, 4) = rCell.Offset(0, -2) 'Background
HokySh.Cells(i, 5) = rCell.Offset(0, -3) 'Age
End If
Next rCell
End Sub
列设置为体育名称为F和loop through each cell的列,检查它是否是"曲棍球"如果是,我使用Offset逐个插入另一张表中的值。
我认为这不是很复杂,即使您只是在学习VBA,您也应该能够理解每一步。如果您需要澄清,请告诉我
public class WczytajUzytkownikow {
public void wczytajPracownikow(final ZarzadzajPracownikami zarzadzajPracownikami, Integer uprawnienie) {
APIInterface apiInterface = ServiceGenerator.createService(APIInterface.class);
Call<List<Uzytkownik>> call = apiInterface.wczytajpracownikow(uprawnienie);
call.enqueue(new Callback<List<Uzytkownik>>() {
@Override
public void onResponse(Call<List<Uzytkownik>> call, Response<List<Uzytkownik>> response) {
List<Uzytkownik> user;
user = response.body();
zarzadzajPracownikami.setUzytko(user);
}
@Override
public void onFailure(Call<List<Uzytkownik>> call, Throwable t) {
new ShowToast().showToast(zarzadzajPracownikami.getActivity(), "Brak pracowników. Dodaj pracownika");
}
});
}
public void wczytajPracownikow(final ZarzadzajKlientami zarzadzajKlientami, Integer uprawnienie) {
APIInterface apiInterface = ServiceGenerator.createService(APIInterface.class);
Call<List<Uzytkownik>> call = apiInterface.wczytajpracownikow(uprawnienie);
call.enqueue(new Callback<List<Uzytkownik>>() {
@Override
public void onResponse(Call<List<Uzytkownik>> call, Response<List<Uzytkownik>> response) {
List<Uzytkownik> user;
user = response.body();
zarzadzajKlientami.setUser(user);
}
@Override
public void onFailure(Call<List<Uzytkownik>> call, Throwable t) {
new ShowToast().showToast(zarzadzajKlientami.getActivity(), "Brak pracowników. Dodaj pracownika");
}
});
}
public void wczytajPracownikow(final KreatorZlecenia kreatorZlecenia, Integer uprawnienie) {
APIInterface apiInterface = ServiceGenerator.createService(APIInterface.class);
Call<List<Uzytkownik>> call = apiInterface.wczytajpracownikow(uprawnienie);
call.enqueue(new Callback<List<Uzytkownik>>() {
@Override
public void onResponse(Call<List<Uzytkownik>> call, Response<List<Uzytkownik>> response) {
List<Uzytkownik> user;
user = response.body();
Log.e("yyyy", "yyyy" + user.size());
Log.e("yyyy", "yyyy" + user);
ArrayList<Uzytkownik> uzytkownicy = new ArrayList<Uzytkownik>(user);
kreatorZlecenia.setPracownicy(uzytkownicy);
}
@Override
public void onFailure(Call<List<Uzytkownik>> call, Throwable t) {
new ShowToast().showToast(kreatorZlecenia.getActivity(), "Brak pracowników. Dodaj pracownika");
}
});
}
public void wczytajKlientow(final KreatorZlecenia kreatorZlecenia, Integer uprawnienie){
APIInterface apiInterface = ServiceGenerator.createService(APIInterface.class);
Call<List<Uzytkownik>> call = apiInterface.wczytajpracownikow(uprawnienie);
call.enqueue(new Callback<List<Uzytkownik>>() {
@Override
public void onResponse(Call<List<Uzytkownik>> call, Response<List<Uzytkownik>> response) {
List<Uzytkownik> list;
list = response.body();
ArrayList<Uzytkownik> array = new ArrayList<Uzytkownik>(list);
kreatorZlecenia.setUzytkownicy(array);
}
@Override
public void onFailure(Call<List<Uzytkownik>> call, Throwable t) {
kreatorZlecenia.wywolajToast("Brak klientów");
kreatorZlecenia.setUzytkownicy(true);
}
});
}
public void wczytajKlientowAddDevice(final AddDevice addDevice, Integer uprawnienie){
APIInterface apiInterface = ServiceGenerator.createService(APIInterface.class);
Call<List<Uzytkownik>> call = apiInterface.wczytajpracownikow(uprawnienie);
call.enqueue(new Callback<List<Uzytkownik>>() {
@Override
public void onResponse(Call<List<Uzytkownik>> call, Response<List<Uzytkownik>> response) {
List<Uzytkownik> list;
list = response.body();
ArrayList<Uzytkownik> array = new ArrayList<Uzytkownik>(list);
addDevice.setUzytkownicy(array);
}
@Override
public void onFailure(Call<List<Uzytkownik>> call, Throwable t) {
new ShowToast().showToast(addDevice.getActivity(), "Brak klientów");
}
});
}
public void wczytajPracownika(final Szczegoly szczegoly, Zlecenia zlecenia){
APIInterface apiInterface = ServiceGenerator.createService(APIInterface.class);
Call<Uzytkownik> call = apiInterface.wczytajuzytkownika(zlecenia.getIdPracownik());
call.enqueue(new Callback<Uzytkownik>() {
@Override
public void onResponse(Call<Uzytkownik> call, Response<Uzytkownik> response) {
Uzytkownik uzytkownik = response.body();
szczegoly.dodajWidok(szczegoly.getView(), uzytkownik);
}
@Override
public void onFailure(Call<Uzytkownik> call, Throwable t) {
new ShowToast().showToast(szczegoly.getActivity(), "Brak klientów");
}
});
}
public void wczytajPracownika(final SzczegolyUzytkownik szczegolyUzytkownik, Sprzety sprzety){
APIInterface apiInterface = ServiceGenerator.createService(APIInterface.class);
Call<Uzytkownik> call = apiInterface.wczytajuzytkownika(sprzety.getIdUzytkownik());
call.enqueue(new Callback<Uzytkownik>() {
@Override
public void onResponse(Call<Uzytkownik> call, Response<Uzytkownik> response) {
Uzytkownik uzytkownik = response.body();
szczegolyUzytkownik.setUzytkownik(uzytkownik);
}
@Override
public void onFailure(Call<Uzytkownik> call, Throwable t) {
new ShowToast().showToast(szczegolyUzytkownik.getActivity(), "Brak klientów");
}
});
}
}
答案 3 :(得分:0)
它必须是.Row.count而不是Row.Number吗?
这就是我所使用的并且效果很好 子TransfersToCleared() 昏暗的工作表 暗淡的LastRow只要长 设置ws = Application.Worksheets(“导出(2)”)'数据源 LastRow = Range(“ A”&Rows.Count).End(xlUp).Row ws.Range(“ A2:AB”&LastRow).SpecialCells(xlCellTypeVisible).Copy