值为 函数的字符串 转为 表达式计算,VFP中可用宏替换,EXCEL VBA中如何实现
最近拷贝了一个色值表到EXCEL表,两列数据,A列是 颜色名称,B列是 十六进制色值,共 144 行数据,由于经常用到 RGB值,为便于参考,
1、我打算增加相应的 RGB值 到 C 列
—— 即根据 B 列的 十六进制色值 转为十进制 RGB 如 #8470FF 到 RGB(132,112,255),生成在 C 列
2、为更直观,同时增加相应的色块到 D 列
—— 根据 RGB值 填充 D 列 单元格背景色
本来打算直接在 EXCEL VBA中完成的,因为 EXCEL 本身具有转换函数 HEX2DEC ,但解决第 2点时,碰到问题,
如何通过 C列 的字符串 “RGB( r,g,b)”如 "RGB(132,112,255)"转化为 RGB(132,112,255) ,然后赋给 interior.color=RGB(132,112,255)
这在VFP中用宏替换容易解决,但在VBA中如何做到呢,上网找了下,好象要用到 微软的脚本控件 Script.control,难道真要这么费劲吗
我试了下,不成功,最后还是用 VFP 结合 EXCEL 来完成。
程序代码:
#define xlFillDefault 0 #define xlPasteFormats -4122 #define xlNone -4142 LOCAL oExcel as 'Excel.application' LOCAL nDataRows as Integer LOCAL cRange,lcStr as String oExcel=Createobject('Excel.application') oExcel.Workbooks.Open('F:\常用RGB色值表.xlsx') oExcel.Worksheets("sheet1").Activate oExcel.Visible=.T. *oExcel.cells.Hyperlinks.Delete oExcel.Range("C1").Select oExcel.ActiveCell.value = "RGB值" oExcel.Range("C2").Select oExcel.ActiveCell.FormulaR1C1 = ; '=HEX2DEC(MID(RC[-1],2,2))&","&HEX2DEC(MID(RC[-1],4,2))&","&HEX2DEC(MID(RC[-1],6,2))' nDataRows=oExcel.SHEETS(1).UsedRange.Rows.Count cRange=["C2:C]+TRANSFORM(nDataRows)+["] oDestination=oExcel.Range(&cRange) nType=xlFillDefault oExcel.Selection.AutoFill(oDestination, nType) oExcel.Range(&cRange).select *!*生成色块列 oExcel.Cells(1,4).value = "色块" FOR r=2 TO nDataRows lcStr='RGB('+oExcel.cells(r,3).value+')' oExcel.cells(r,4).interior.color=&lcStr && NEXT oExcel.Range("B1").select oExcel.Selection.Copy oExcel.Range("D1").Select oExcel.Selection.PasteSpecial(xlPasteFormats,xlNone, .F., .F.) &&格式化标题 *!*最后格式化 RGB值数据列 cRange=["B1:B]+TRANSFORM(nDataRows+1)+["] oExcel.Range(&cRange).select oExcel.Selection.Copy oExcel.Range("C1").Select oExcel.Selection.PasteSpecial(xlPasteFormats,xlNone, .F., .F.) oExcel.columns("C").autofit oExcel.Application.CutCopyMode=.f.
我的问题是:VFP的宏替换功能, VBA中如何实现?
附转换后的数据表:
常用RGB色值表.rar
(14.59 KB)
[ 本帖最后由 wasun2012 于 2013-2-5 11:54 编辑 ]