ExcelVBA常用代码VSTO版.docx
- 文档编号:3946546
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:19
- 大小:32.18KB
ExcelVBA常用代码VSTO版.docx
《ExcelVBA常用代码VSTO版.docx》由会员分享,可在线阅读,更多相关《ExcelVBA常用代码VSTO版.docx(19页珍藏版)》请在冰豆网上搜索。
ExcelVBA常用代码VSTO版
ExcelVBA常用代码VSTO版
ExcelVBA常用代码VSTO版(C#)
1-1使用Range属性
this.Range["A3:
F6,B1:
C5"].Select();
1-2使用Cells属性
for(inticell=1;icell<=100;icell++)
{
this.Application.Worksheets[2].cells[icell,1].value=icell;
}
1-3使用快捷记号
#N/A
1-4使用Offset属性
this.Range["A1:
A3"].Offset[3,3].Select();
1-5使用Resize属性
this.Range["A1"].Resize[3,3].Select();
1-6使用Union属性
this.Application.Union(this.Range["A1:
D4"],this.Range["E5:
H8"]).Select();
1-7使用UsedRange属性
this.UsedRange.Select();
1-8使用CurrentRegion属性
this.Range["A5"].CurrentRegion.Select();
2-1使用Select方法
this.Application.Worksheets[3].Activate();
this.Application.Worksheets[3].Range["A1:
B10"].Select();
2-2使用Activate方法
this.Application.Worksheets[3].Activate();
this.Application.Worksheets[3].Range["A1:
B10"].Activate();
注:
此处的代码,可以运行,但是只会选中A1这一个单元格
2-3使用Goto方法
this.Application.Goto(this.Application.Worksheets[3].Range["A1:
B10"],true);
3-1获得指定行,列中的最后一个非空单元格
Excel.Rangerng=this.Range["A65535"].End[Excel.XlDirection.xlUp];
MessageBox.Show("A列中最后一个非空单元格是"+rng.Address[0,0]+",行号"+rng.Row.ToString()+",数值"+rng.Text);
4-1定位单元格
Excel.Rangerng=this.UsedRange.SpecialCells(Excel.XlCellType.xlCellTypeFormulas);
rng.Select();
MessageBox.Show("工作表中有公式的单元格为:
"+rng.Address);
5-1查找单元格
Excel.Rangerng,Rng;
Rng=this.Range["A:
A"];
stringstrFind=textBox1.Text;
if(strFind.Trim()!
=string.Empty)
{
rng=Rng.Find(strFind,Rng.Cells[Rng.Cells.Count],Excel.XlFindLookIn.xlValues,Excel.XlLookAt.xlWhole,Excel.XlSearchOrder.xlByRows,Excel.XlSearchDirection.xlNext,false);
if(rng!
=null)
{
this.Application.Goto(rng,true);
}
else
{
MessageBox.Show("没有找到单元格!
");
}
}
注:
C#中没有InputBox,这里用文本框代替,另,C#中没有with……Endwith语句.
5-1查找单元格重复数据
Excel.Rangerng,Rng;
stringFindAddress=string.Empty;
Rng=this.Range["A:
A"];
stringstrFind=textBox1.Text;
if(strFind.Trim()!
=string.Empty)
{
rng=Rng.Find(strFind,Rng.Cells[Rng.Cells.Count],Excel.XlFindLookIn.xlValues,Excel.XlLookAt.xlWhole,Excel.XlSearchOrder.xlByRows,Excel.XlSearchDirection.xlNext,false);
if(rng!
=null)
{
FindAddress=rng.Address;
do
{
rng.Interior.ColorIndex=6;
rng=Rng.FindNext(rng);
}while(rng!
=null&&rng.Address!
=FindAddress);
}
}
5-2使用Like运算符
C#中没有Like运算符,可以用正则表达式来处理.
6-1替换单元格内字符串
this.Range["A1:
A5"].Replace("通州","南通");
7-1复制单元格区域
this.Application.DisplayAlerts=false;
this.Range["A1"].CurrentRegion.Copy(this.Application.Worksheets[2].Range["A1"]);
this.Application.DisplayAlerts=true;
7-2复制单元格区域时带列宽大小
this.Range["A1"].CurrentRegion.Copy();
Excel.Rangerng=this.Application.Worksheets[3].Range["A1"];
rng.PasteSpecial(Excel.XlPasteType.xlPasteColumnWidths);
rng.PasteSpecial(Excel.XlPasteType.xlPasteAll);
this.Application.CutCopyMode=Excel.XlCutCopyMode.xlCut;
8-1使用选择性粘贴
this.Range["A1"].CurrentRegion.Copy();
Excel.Rangerng=this.Application.Worksheets[3].Range["A1"];
rng.PasteSpecial(Excel.XlPasteType.xlPasteValues);
this.Application.CutCopyMode=Excel.XlCutCopyMode.xlCut;
8-2直接赋值的方法
Excel.Rangerng=this.Application.Worksheets[3].Range["A1"];
Excel.RangeRng=this.Range["A1"].CurrentRegion;
rng.Resize[Rng.Rows.Count,Rng.Columns.Count].Value=Rng.Value;
9-1单元格自动进入编辑状态
先在”VSTO设计器生成的代码”内加入
this.SelectionChange+=newExcel.DocEvents_SelectionChangeEventHandler(工作表1_SelectionChange);
然后在事件代码中输入
if(Target.Column==3&&Target.Count==1)
{
if(Target.Text==string.Empty)
{
this.Application.SendKeys("{F2}");
}
}
10-1禁用单元格拖放功能
if(this.Application.Intersect(Target,this.Range["A1:
A15"])!
=null)
{
this.Application.CellDragAndDrop=false;
}
else
{
this.Application.CellDragAndDrop=true;
}
11-1单元格字体格式设置
Excel.Fontrng=this.Range["A1"].Font;
rng.Name="宋体";
rng.FontStyle="Bold";
rng.Size=18;
rng.ColorIndex=3;
rng.Underline=2;
11-2设置单元格内部格式
Excel.Interiorrng=this.Range["A1"].Interior;
rng.ColorIndex=3;
rng.Pattern=Excel.XlPattern.xlPatternCrissCross;
rng.PatternColorIndex=6;
11-3为单元格区域添加边框
Excel.Bordersrng=this.Range["B4:
G10"].Borders;
rng.LineStyle=Excel.XlLineStyle.xlContinuous;
rng.Weight=Excel.XlBorderWeight.xlThin;
rng.ColorIndex=5;
Excel.XlColorIndexcol=(Excel.XlColorIndex)5;
this.Range["B4:
G10"].BorderAround2(Excel.XlLineStyle.xlContinuous,Excel.XlBorderWeight.xlMedium,col);
11-3为单元格区域应用多种边框格式
Excel.XlColorIndexcol=(Excel.XlColorIndex)5;
Excel.Borderrng=this.Range["B4:
G10"].Borders[Excel.XlBordersIndex.xlInsideHorizontal];
Excel.BorderRng=this.Range["B4:
G10"].Borders[Excel.XlBordersIndex.xlInsideVertical];
rng.LineStyle=Excel.XlLineStyle.xlDot;
rng.Weight=Excel.XlBorderWeight.xlThin;
rng.ColorIndex=col;
Rng.LineStyle=Excel.XlLineStyle.xlContinuous;
Rng.Weight=Excel.XlBorderWeight.xlThin;
Rng.ColorIndex=col;
this.Range["B4:
G10"].BorderAround2(Excel.XlLineStyle.xlContinuous,Excel.XlBorderWeight.xlMedium,col);
11-4靈活設置單元格的行高列寬
Excel.Rangerng1=this.Range["A1"];
Excel.Rangerng2=this.Range["B1"];
rng1.RowHeight=this.Application.CentimetersToPoints
(2);
rng1.ColumnWidth=this.Application.CentimetersToPoints(1.5);
rng2.RowHeight=this.Application.CentimetersToPoints(1.2);
rng2.ColumnWidth=this.Application.CentimetersToPoints(0.3);
12-1單元格中建立數據有效性
Excel.Rangerng=this.Range["A1:
A10"];
rng.Validation.Delete();
rng.Validation.Add(
Excel.XlDVType.xlValidateList,
Excel.XlDVAlertStyle.xlValidAlertStop,
Excel.XlFormatConditionOperator.xlBetween,
"1,2,3,4,5,6,7,8");
12-2判斷單元格是否存在數據有效性
try
{
if(this.Range["A12"].Validation.Type>=0)
{
MessageBox.Show("單元格中有數據有效性!
");
}
}
catch
{
MessageBox.Show("單元格中沒有數據有效性!
");
}
12-3動態的數據有效性
void工作表1_SelectionChange(Excel.RangeTarget)
{
if(Target.Column==1&&Target.Count==1&&Target.Row>1)
{
Target.Validation.Delete();
Target.Validation.Add(
Excel.XlDVType.xlValidateList,
Excel.XlDVAlertStyle.xlValidAlertStop,
Excel.XlFormatConditionOperator.xlBetween,
"主機,顯示器");
}
}
12-4自動展開數據有效性下拉列表
this.Application.SendKeys("%{down}");
13-1在單元格中寫入公式
this.Range["C1:
C10"].Formula="=sum(A1,B1)";
13-1寫入單元格區域數組公式
this.Range["C1"].FormulaArray="=A1:
A2*B1:
B2";
13-2檢查單元格是否含有公式
Excel.Rangerng=this.Application.Selection;
if(Convert.IsDBNull(rng.HasFormula))
{
MessageBox.Show("公式區域為:
"+rng.SpecialCells(Excel.XlCellType.xlCellTypeFormulas,23).Address[0,0]);
}
elseif(rng.HasFormula)
{
MessageBox.Show("全部單元格為公式!
");
}
else
{
MessageBox.Show("全部單元格不為公式!
");
}
注:
因為HasFormula返回的是一個dynamic類型的值,C#的swith貌似并不支持.
13-3判斷單元格公式是否存在錯誤
未研究出來,如何調用VBA.IsError,用了Excel自帶函數來處理的.
Excel.Rangerng=this.Range["A1"].Offset[0,1];
rng.Formula="=iserror(A1)";
if(rng.Value)
{
MessageBox.Show("A1單元格錯誤類型為:
"+this.Range["A1"].Text);
}
else
{
MessageBox.Show("A1單元格結果為:
"+this.Range["A1"].Text);
}
13-4取得單元格中公式的引用單元格
Excel.Rangerng=this.Range["C1"].Precedents;
MessageBox.Show("公式所引用的單元格有:
"+rng.Address);
13-5將單元格中的公式轉換為數值
Excel.Rangerng=this.Range["C1:
C10"];
rng.Formula="=sum(A1:
B1)";
rng.Value=rng.Value;
14-1判斷單元格是否存在指注
if(this.Range["A1"].Comment==null)
{
MessageBox.Show("A1單元格中沒有批注");
}
else
{
MessageBox.Show("A1單元格中批注內容為:
"+"\n"+this.Range["A1"].Comment.Text());
}
14-2為單元格添加批注
Excel.Rangerng=this.Range["A1"];
if(rng.Comment==null)
{
rng.AddComment(rng.Text);
rng.Comment.Visible=true;
}
14-3刪除單元格中的批注
Excel.Rangerng=this.Range["A1"];
if(rng.Comment!
=null)
{
rng.Comment.Delete();
}
15-1判斷單元格區域是否存在合并單元格
Excel.Rangerng=this.Application.Selection;
if(Convert.IsDBNull(rng.MergeCells))
{
MessageBox.Show("區域中包含合并單元格!
");
}
elseif(rng.MergeCells)
{
MessageBox.Show("區域中全部為合并單元格!
");
}
else
{
MessageBox.Show("區域中沒有合并單元格!
");
}
15-2合并單元格時連接每個單元格的文本
Excel.Rangerng=this.Application.Selection;
strings=string.Empty;
foreach(Excel.RangeRnginrng)
{
s=s+Rng.Text;
}
this.Application.DisplayAlerts=false;
rng.Merge();
rng.Value=s;
this.Application.DisplayAlerts=true;
15-3合并內容相同的連續單元格
intrEnd=this.Range["A65535"].End[Excel.XlDirection.xlUp].Row;
this.Application.DisplayAlerts=false;
for(inti=rEnd;i>=2;i--)
{
Excel.Rangerng=this.Cells[i,1];
if(rng.Value==rng.Offset[-1,0].Value)
{
this.Application.Union(rng,rng.Offset[-1,0]).Merge();
}
}
15-4取消合并單元格時在每個單元格中保留內容
intrEnd=this.Range["A65535"].End[Excel.XlDirection.xlUp].Row;
intm=this.Cells[rEnd,1].MergeArea.Count-1;
this.Range[Cells[1,1],Cells[rEnd,1]].UnMerge();
this.Application.DisplayAlerts=false;
for(inti=1;i { Excel.Rangerng=this.Cells[i,1]; if(rng.Offset[1,0].Text==string.Empty) { rng.Offset[1,0].Value=rng.Value; } } 16-1高亮顯示單元格區域 Excel.Rangerng=this.Application.Selection; Cells.Interior.ColorIndex=Excel.XlColorIndex.xlColorIndexNone; rng.Interior.ColorIndex=8; 17-1雙擊被保護單元格時不顯示提示消息框 if(Target.Locked) { MessageBox.Show("此單元格已保護,不能編輯"); Cancel=true; } 18-1重新計算工作表指定區域 Excel.XlCalculationoldCalcultion=this.Application.Calculation; this.Application.Calculation=Excel.XlCalculation.xlCalculationManual; this.Range["A1: D10"].Calculate(); this.Application.Calculation=oldCalcultion; 19-1錄入數據后單元格自動保護 if(this.ProtectContents) { this.Unprotect("123456"); } if(Target.Text! =string.Empty) { Target.Locked=true; this.Protect("123456"); } 20-1使用單元格的Address屬性 if(Target.Address[0,0]=="A1") { MessageBox.Show("你選擇了A1單元格"); } 20-2使用Column屬性和Row屬性 inti=0; if(Target.Column==1&&Target.Row<11&&int.TryParse(Target.Text,outi)) { Target.Offset[0,1].Value=i*3; } 20-3使用Intersect方法 Excel.Rangerng=this.Application.Intersect(Tar
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ExcelVBA 常用 代码 VSTO